package com.kt.common.`fun`

/**
 * 声明为成员的扩展可以声明为 open 并在子类中覆盖。
 * 这意味着这些函数的分发对于分发接收者类型是虚拟的，但对于扩展接收者类型是静态的。
 */
open class BaseCaller {
    open fun Base.printFunctionInfo() {
        println("Base extension function in BaseCaller")
    }

    open fun Derived.printFunctionInfo() {
        println("Derived extension function in BaseCaller")
    }


    fun call(b: Base) {
        //如果只有此方法， 扩展接受者是静态的 ，所以b一定是base的 ，有重载的话会走下边
        b.printFunctionInfo()   // 调用扩展函数
    }

    /*fun call(b: Derived) {
        b.printFunctionInfo()   // 调用扩展函数
    }*/

}